import warnings
warnings.filterwarnings('ignore')
import pandas as pd
pd.__version__
data = pd.read_csv("https://raw.githubusercontent.com/pbiecek/xai-happiness/main/happiness.csv", index_col=0)
data.head()
X, y = data.drop('score', axis=1), data.score
n, p = X.shape
import tensorflow as tf
tf.__version__
tf.random.set_seed(11)
normalizer = tf.keras.layers.experimental.preprocessing.Normalization(input_shape=[p,])
normalizer.adapt(X.to_numpy())
model = tf.keras.Sequential([
normalizer,
tf.keras.Input(shape=(p,)),
tf.keras.layers.Dense(p*2, activation='relu'),
tf.keras.layers.Dense(p*3, activation='relu'),
tf.keras.layers.Dense(p*2, activation='relu'),
tf.keras.layers.Dense(p, activation='relu'),
tf.keras.layers.Dense(1, activation='relu')
])
model.compile(
optimizer=tf.keras.optimizers.Adam(0.001),
loss=tf.keras.losses.mae
)
model.fit(X, y, batch_size=int(n/10), epochs=2000, verbose=False)
import dalex as dx
dx.__version__
explainer = dx.Explainer(model, X, y, label='happiness')
explainer.model_performance()
explainer.model_parts().plot()
explainer.model_parts(type='shap_wrapper').plot()
explainer.model_profile().plot(variables=['social_support', 'healthy_life_expectancy',
'gdp_per_capita', 'freedom_to_make_life_choices'])
explainer.model_diagnostics().plot(variable='social_support', marker_size=5, line_width=3)
explainer.predict_parts(X.loc['Poland'], type='shap').plot()
pp_list = []
for country in ['Afghanistan', 'Belgium', 'China', 'Denmark', 'Ethiopia']:
pp = explainer.predict_parts(X.loc[country], type='break_down')
pp.result.label = country
pp_list += [pp]
pp_list[0].plot(pp_list[1::], min_max=[2.5, 8.5])
lime_explanation = explainer.predict_surrogate(X.loc['United States'], mode='regression')
lime_explanation.show_in_notebook()
surrogate_model = explainer.model_surrogate(max_vars=4, max_depth=3)
surrogate_model.performance
surrogate_model.plot()
This package uses plotly to render the plots:
plotly in JupyterLab: Getting Started Troubleshootingshow=False parameter in plot method to return plotly Figure objectdalex package: Titanic: tutorial and examples